//
//  UITextView+Extension.swift
//  HMWeiBo
//
//  Created by Apple on 16/8/9.
//  Copyright © 2016年 itheima. All rights reserved.
//

import UIKit

extension UITextView{
    
    /* 代码抽取的步骤
        1. 把要抽取的代码,复制到指定位置/指定方法
        2. 把需要的对象,以参数的形式体现
        3. 当抽取的代码没有问题的时候,把原来的代码删除
    */
    func insertEmoticon(emoticon: HMEmoticon){
        
        // 判断一下图片表情
        if let path = emoticon.path,png = emoticon.png {
            
            // 0 先把之前的表情先记录
            let beforeAttribute = NSMutableAttributedString(attributedString: self.attributedText)
            
            
            // 1 创建一个 NSTextAttachment 对象
            let attach = HMTextAttachment()
            
            //
            attach.emoticon = emoticon
            
            // 1.1 拼接图片路径
            let imagePath = "\(path)/\(png)"
            
            // 1.2 设置图片
            attach.image = UIImage(named: imagePath)
            // 1.3 设置图片的大小 --表情的大小一致 第一步
            // 获取textView文字的大小的高度
            let fontHeight = self.font!.lineHeight
            
            attach.bounds = CGRectMake(0, 0, fontHeight, fontHeight)
            // 2. 创建一个含有附件的 NSAttributedString
            let attribute = NSAttributedString(attachment: attach)
            
            // 获取光标的位置
            let range = self.selectedRange
            // 3.把之前记录的Attribute和现在创建好的进行拼接
            //            beforeAttribute.appendAttributedString(attribute)
            // 光标所在的位置
            beforeAttribute.replaceCharactersInRange(NSMakeRange(range.location, 0), withAttributedString: attribute)
            
            
            // 3.1 设置attribute的字体大小 -- 表情的大小一致 第二步
            beforeAttribute.addAttributes([NSFontAttributeName: self.font!], range: NSMakeRange(0, beforeAttribute.length))
            
            // 4. 赋值
            self.attributedText = beforeAttribute
            
            // 5 恢复光标的位置 -- 在赋值之后
            self.selectedRange = NSMakeRange(range.location + 1, 0)
            
            // 调用一个代理方法 -- textViewDidChange! 为什么要强制解包 要保证这个代理方法必须实现
            self.delegate?.textViewDidChange!(self)
            
            //                textView.delegate?.textViewDidChange?(textView)
        }
        
        // 判断一下 emoji表情
        if let emoji = emoticon.emoji {
            
            // 我们的 emoji不能用 attribute ,存在问题
            //                let attribute = NSMutableAttributedString(attributedString: textView.attributedText)
            //
            //                let range = textView.selectedRange
            //
            //                attribute.replaceCharactersInRange(range, withString: emoji)
            //
            //                textView.attributedText = attribute
            //
            //                textView.selectedRange = NSMakeRange(range.location + 1, 0)
            
            // 记住 emoji是 String并不是附件
            // 图片是附件,需要用 AttributeString来转换
            
            self.replaceRange(self.selectedTextRange!, withText: emoji)
            
            
        }

        
    }
    
}
